package com.divemotor.ventarepuestosinternet.service.impl;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.divemotor.ventarepuestosinternet.beans.adapter.ImagenRepuestoAdapter;
import com.divemotor.ventarepuestosinternet.dao.ImagenRepuestoDAO;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Imagen;
import com.divemotor.ventarepuestosinternet.model.ImagenRepuesto;
import com.divemotor.ventarepuestosinternet.model.ImagenRepuestoNroSa;
import com.divemotor.ventarepuestosinternet.model.Repuesto;
import com.divemotor.ventarepuestosinternet.service.ImagenRepuestoService;
import com.divemotor.ventarepuestosinternet.util.Constantes;
import com.divemotor.ventarepuestosinternet.util.DatosDeSession;
import com.divemotor.ventarepuestosinternet.util.FechasUtil;

@Service(value = "imagenRepuestoService")
@Transactional(rollbackFor=Exception.class)
public class ImagenRepuestoServiceImpl implements ImagenRepuestoService, Serializable {

	private static final long serialVersionUID = 1L;
	
	@Autowired
	private ImagenRepuestoDAO imagenRepuestoDAO;

	@Override
	public List<ImagenRepuesto> listarImagenesRepuestosPorImagen(Imagen imagen) throws DivemotorBusinessException {
		ImagenRepuesto imagenRepuesto = new ImagenRepuesto();
		imagenRepuesto.setImagen(imagen);
		return imagenRepuestoDAO.listarImagenesRepuestosPorImagen(imagenRepuesto);
	}
	
	@Override
	public ImagenRepuesto obtenerImagenRepuestoById(Integer idImagenRepuesto){
		return imagenRepuestoDAO.obtenerPorId(idImagenRepuesto);
	}

	@Override
	public List<ImagenRepuestoAdapter> listarImagenesRepuestosActivosPorImagen(Integer idImagen, String chasis, String codGrupo) throws DivemotorBusinessException {
		return imagenRepuestoDAO.listarImagenesRepuestosActivosPorImagen(idImagen, chasis, codGrupo);
	}
	
	@Override
	public void insertarImagen(ImagenRepuesto imagenRepuesto) throws DivemotorBusinessException {
		imagenRepuesto.setUsuarioCreacion(DatosDeSession.obtenerUsuarioAutenticado());
		imagenRepuesto.setFechaCreacion(FechasUtil.obtenerFechaActual());
		imagenRepuestoDAO.insertar(imagenRepuesto);
	}
	
	@Override
	public void desAsignarRepuestoAImagen(ImagenRepuesto imagenRepuesto) throws DivemotorBusinessException {
		imagenRepuesto.setUsuarioEliminacion(DatosDeSession.obtenerUsuarioAutenticado());
		imagenRepuesto.setFechaEliminacion(FechasUtil.obtenerFechaActual());
		imagenRepuesto.setEstado(Constantes.ESTADO_ELIMINADO);
		imagenRepuestoDAO.actualizar(imagenRepuesto);
	}

	@Override
	public List<ImagenRepuesto> buscarPorNombreRepuesto(Repuesto repuesto) throws DivemotorBusinessException {
		return imagenRepuestoDAO.buscarPorNombreRepuesto(repuesto);
	}

	@Override
	public List<ImagenRepuestoAdapter> buscarActivosPorNombreRepuesto(String descripcion, String chasis) throws DivemotorBusinessException {
		return imagenRepuestoDAO.buscarActivosPorNombreRepuesto(descripcion, chasis);
	}

	@Override
	public void actualizar(ImagenRepuesto imagenRepuesto) throws DivemotorBusinessException {
		imagenRepuestoDAO.actualizar(imagenRepuesto);
	}
	
	@Override
	public synchronized boolean existeImagenRepuesto(ImagenRepuesto imagenRepuesto){
		return imagenRepuestoDAO.existeImagenRepuesto(imagenRepuesto);
	}
	
	@Override
	public List<ImagenRepuestoNroSa> listarNumeroSaAdapter(ImagenRepuesto imagenRepuesto){
		return imagenRepuestoDAO.listarNumeroSaAdapter(imagenRepuesto);
	}
	
	@Override
	public void eliminarNumeroSa(ImagenRepuestoNroSa imgRptoNro){
		imagenRepuestoDAO.eliminarNumeroSa(imgRptoNro);
	}
	
	@Override
	public void insertarNumero(ImagenRepuestoNroSa imagenRepuestoNroSa){
		imagenRepuestoDAO.insertarNumero(imagenRepuestoNroSa);
	}

}
